package com.unipay.system.utils;

import com.unipay.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * @BelongsProject: unipay-auth-parent
 * @Author: cmy
 * @CreateTime: 2023-02-08  20:48
 * @Description: TODO
 */

public class MenuHelper {

    //（1）构建 “树形” 结构
    public static List<SysMenu> buildTree(List<SysMenu> sysMenus){
        // 创建集合，封装最终数据
        List<SysMenu> trees = new ArrayList<SysMenu>();
        // 遍历，所有菜单集合
        for(SysMenu sysMenu: sysMenus){
            // 先：找到递归入口 .parentId = 0
            if (sysMenu.getParentId().longValue() == 0){
//                Long parentId = sysMenu.getParentId();
                trees.add(findChindren(sysMenu, sysMenus));
            }
        }
        return trees;
    }

    //（2）从根节点进行“递归”：查找子节点，并添加到树中
    // 判断条件：.id = .parentId；是子节点，则继续进行封装
    public static SysMenu findChindren(SysMenu sysMenu, List<SysMenu> treeNodes){
        // TODO 初始化，数据
        sysMenu.setChildren(new ArrayList<SysMenu>());
        // 遍历递归查找
        for (SysMenu it: treeNodes){
//            String id = sysMenu.getId();
            if (Long.parseLong(sysMenu.getId()) == it.getParentId().longValue()){
                // 加一层判断，初始化？？？
                if (sysMenu.getChildren() == null){
                    sysMenu.setChildren(new ArrayList<SysMenu>());
                }
                sysMenu.getChildren().add(findChindren(it, treeNodes));
            }
        }
        return sysMenu;
        // 返回：仍是一个SysMenu对象，只是在向下遍历过程中，为该对象的.setChildren()属性，赋值了一个List<SysMenu>集合。
    }
}
